Pour installe ArchiSimple :
g++ *.cpp external/tinyxml2/tinyxml2.cpp -std=c++11 -o archisimple.exe (dans le terminal au directory ArchiSimple93)
archisimple.exe

heure_debut <- Sys.time()

1 Fonction pour run le modèle

1.1 Run archisimple

ArchiSimple <- function(par,exporttype,time) {
  setwd("ArchiSimple/src/archisimple93/")
  inc <-0
  for (variety in par$exportName) {
    # Print l'avancé de la boucle
    inc <- inc+1
    print(paste("Simulation pour :", variety, "i=", inc, '========================'))
    
    
    #Update les paramètres
      ## Regarde chaque colone de params, si la même est dans par, il remplace la colonne de params par celle de par
    params <- params %>%
      mutate(across(everything(), ~ ifelse(cur_column() %in% names(par), par[inc,][[cur_column()]],.))) %>%
      mutate(exportType = exporttype) %>%
      mutate(simtime=time)
    print(params)
    # Créaction du fichier paramètre lu par ArchiSimple
    write_archisimple_XML(params, path = "parameter.xml")
    
    # Run ArchiSimple
    system("./archisimple")
  }
  setwd("../../../")
}

1.2 Plot racine

# Fonction qui fait un plot pour chaque jour jusqu'à jour max
time_plot <- function(data, variety,time) {
  for (i in time) {
    print(i)
    print(paste('Plot pour',variety,'jour',i))
    print(
      filter(data,sim==variety, Jour <= i) %>%
        ggplot() +
        theme_classic() +
        geom_segment(aes(x = X1, y = -Z1, xend = X2, yend = -Z2, color=Diam), alpha=0.9) +
        scale_x_continuous(limits=c(-500,+500)) +
        scale_y_continuous(limits = c(-2000, 0)) +
        scale_color_viridis(limits=c(0,7),option = "turbo") +
        coord_fixed()+
        labs(title=paste(variety,'jour',i),col='Diamètre')
    )
  }
  }

2 Sorgho

2.1 Choix des valeurs de paramètres

Importe le fichier ‘base_parameter.xml’ ainsi qu’un dataframe avec les valeurs qui doivent être modifiées.

# Import des paramètres de base
params <- read_archisimple_xml("base_parameter.xml")

# Insérer les différents paramètres à modifier dans le batch
par_sorgho <- data.frame(
    exportName=c('Amiggo','Biggben','Hyperion','Juno','Swingg','Vegga'),
    dmin=c(      0.1567  ,0.1567  ,0.1567   ,0.1567  ,0.1567  ,0.1297),
    RDM = c(     0.1874  ,0.2022  ,0.228    ,0.17545 ,0.1745  ,0.1611)
  )

2.2 Run le modèle .txt

ArchiSimple(par=par_sorgho,exporttype = 1,time = 40)
## [1] "Simulation pour : Amiggo i= 1 ========================"
## # A tibble: 1 × 27
##   ageAdv CVDD   dAdv   distAdv dmax      dmin dSem  EL    erAdv erSem exportName
##   <chr>  <chr>  <chr>  <chr>   <chr>    <dbl> <chr> <chr> <chr> <chr> <chr>     
## 1 4      0.2449 0.3407 30      6.984537 0.157 0.08… 33.0… 1.2   1     Amiggo    
## # ℹ 16 more variables: exportType <dbl>, GDs <chr>, IPD <chr>, LDC <chr>,
## #   maxAdv <chr>, maxSem <chr>, pdmax <chr>, pdmin <chr>, PDT <chr>, RDM <dbl>,
## #   SGC <chr>, sim_length <chr>, simtime <dbl>, TMD <chr>, TrInt <chr>,
## #   TrT <chr>
## [1] "Simulation pour : Biggben i= 2 ========================"
## # A tibble: 1 × 27
##   ageAdv CVDD   dAdv   distAdv dmax      dmin dSem  EL    erAdv erSem exportName
##   <chr>  <chr>  <chr>  <chr>   <chr>    <dbl> <chr> <chr> <chr> <chr> <chr>     
## 1 4      0.2449 0.3407 30      6.984537 0.157 0.08… 33.0… 1.2   1     Biggben   
## # ℹ 16 more variables: exportType <dbl>, GDs <chr>, IPD <chr>, LDC <chr>,
## #   maxAdv <chr>, maxSem <chr>, pdmax <chr>, pdmin <chr>, PDT <chr>, RDM <dbl>,
## #   SGC <chr>, sim_length <chr>, simtime <dbl>, TMD <chr>, TrInt <chr>,
## #   TrT <chr>
## [1] "Simulation pour : Hyperion i= 3 ========================"
## # A tibble: 1 × 27
##   ageAdv CVDD   dAdv   distAdv dmax      dmin dSem  EL    erAdv erSem exportName
##   <chr>  <chr>  <chr>  <chr>   <chr>    <dbl> <chr> <chr> <chr> <chr> <chr>     
## 1 4      0.2449 0.3407 30      6.984537 0.157 0.08… 33.0… 1.2   1     Hyperion  
## # ℹ 16 more variables: exportType <dbl>, GDs <chr>, IPD <chr>, LDC <chr>,
## #   maxAdv <chr>, maxSem <chr>, pdmax <chr>, pdmin <chr>, PDT <chr>, RDM <dbl>,
## #   SGC <chr>, sim_length <chr>, simtime <dbl>, TMD <chr>, TrInt <chr>,
## #   TrT <chr>
## [1] "Simulation pour : Juno i= 4 ========================"
## # A tibble: 1 × 27
##   ageAdv CVDD   dAdv   distAdv dmax      dmin dSem  EL    erAdv erSem exportName
##   <chr>  <chr>  <chr>  <chr>   <chr>    <dbl> <chr> <chr> <chr> <chr> <chr>     
## 1 4      0.2449 0.3407 30      6.984537 0.157 0.08… 33.0… 1.2   1     Juno      
## # ℹ 16 more variables: exportType <dbl>, GDs <chr>, IPD <chr>, LDC <chr>,
## #   maxAdv <chr>, maxSem <chr>, pdmax <chr>, pdmin <chr>, PDT <chr>, RDM <dbl>,
## #   SGC <chr>, sim_length <chr>, simtime <dbl>, TMD <chr>, TrInt <chr>,
## #   TrT <chr>
## [1] "Simulation pour : Swingg i= 5 ========================"
## # A tibble: 1 × 27
##   ageAdv CVDD   dAdv   distAdv dmax      dmin dSem  EL    erAdv erSem exportName
##   <chr>  <chr>  <chr>  <chr>   <chr>    <dbl> <chr> <chr> <chr> <chr> <chr>     
## 1 4      0.2449 0.3407 30      6.984537 0.157 0.08… 33.0… 1.2   1     Swingg    
## # ℹ 16 more variables: exportType <dbl>, GDs <chr>, IPD <chr>, LDC <chr>,
## #   maxAdv <chr>, maxSem <chr>, pdmax <chr>, pdmin <chr>, PDT <chr>, RDM <dbl>,
## #   SGC <chr>, sim_length <chr>, simtime <dbl>, TMD <chr>, TrInt <chr>,
## #   TrT <chr>
## [1] "Simulation pour : Vegga i= 6 ========================"
## # A tibble: 1 × 27
##   ageAdv CVDD   dAdv   distAdv dmax      dmin dSem  EL    erAdv erSem exportName
##   <chr>  <chr>  <chr>  <chr>   <chr>    <dbl> <chr> <chr> <chr> <chr> <chr>     
## 1 4      0.2449 0.3407 30      6.984537 0.130 0.08… 33.0… 1.2   1     Vegga     
## # ℹ 16 more variables: exportType <dbl>, GDs <chr>, IPD <chr>, LDC <chr>,
## #   maxAdv <chr>, maxSem <chr>, pdmax <chr>, pdmin <chr>, PDT <chr>, RDM <dbl>,
## #   SGC <chr>, sim_length <chr>, simtime <dbl>, TMD <chr>, TrInt <chr>,
## #   TrT <chr>

2.3 Résultats de la modélisation

setwd("ArchiSimple/src/archisimple93/")
sims <- NULL
for (variety in c('Amiggo','Biggben','Hyperion','Juno','Swingg','Vegga')) {
  rs <- fread(paste0(variety,'.txt')) %>%
    mutate(sim = as.factor(variety))
  sims <- rbind(sims,rs)
}
setwd("../../../") 

2.3.1 Plot

for (variety in levels(sims$sim)) {
  time_plot(sims,variety = variety, time=c(10,15,20,25,30,35,40))
  print(paste('La profondeur max du système racinaire après', max(subset(sims,sim==variety)$Jour),'jours=',max(subset(sims,sim==variety)$Z1),'[mm]'))
  print(paste0('Le système racinaire après' , max(subset(sims,sim==variety)$Jour),'jours s étend de',min(subset(sims,sim==variety)$X1),'[mm] à ',max(subset(sims,sim==variety)$X1),'[mm] soit une largeur totale de :',
               max(subset(sims,sim==variety)$X1)-min(subset(sims,sim==variety)$X1),'[mm]'))
  print(paste('Le diamètre moyen des racines après', max(subset(sims,sim==variety)$Jour),' 40 jours est =',mean(subset(sims, sim==variety)$Diam)))
}
## [1] 10
## [1] "Plot pour Amiggo jour 10"

## [1] 15
## [1] "Plot pour Amiggo jour 15"

## [1] 20
## [1] "Plot pour Amiggo jour 20"

## [1] 25
## [1] "Plot pour Amiggo jour 25"

## [1] 30
## [1] "Plot pour Amiggo jour 30"
## Warning: Removed 14 rows containing missing values (`geom_segment()`).

## [1] 35
## [1] "Plot pour Amiggo jour 35"
## Warning: Removed 202 rows containing missing values (`geom_segment()`).

## [1] 40
## [1] "Plot pour Amiggo jour 40"
## Warning: Removed 1859 rows containing missing values (`geom_segment()`).

## [1] "La profondeur max du système racinaire après 40 jours= 1591.78 [mm]"
## [1] "Le système racinaire après40jours s étend de-588.44[mm] à 702.8[mm] soit une largeur totale de :1291.24[mm]"
## [1] "Le diamètre moyen des racines après 40  40 jours est = 0.767675093387735"
## [1] 10
## [1] "Plot pour Biggben jour 10"

## [1] 15
## [1] "Plot pour Biggben jour 15"

## [1] 20
## [1] "Plot pour Biggben jour 20"

## [1] 25
## [1] "Plot pour Biggben jour 25"

## [1] 30
## [1] "Plot pour Biggben jour 30"
## Warning: Removed 47 rows containing missing values (`geom_segment()`).

## [1] 35
## [1] "Plot pour Biggben jour 35"
## Warning: Removed 265 rows containing missing values (`geom_segment()`).

## [1] 40
## [1] "Plot pour Biggben jour 40"
## Warning: Removed 988 rows containing missing values (`geom_segment()`).

## [1] "La profondeur max du système racinaire après 40 jours= 1577.35 [mm]"
## [1] "Le système racinaire après40jours s étend de-653.2[mm] à 701.06[mm] soit une largeur totale de :1354.26[mm]"
## [1] "Le diamètre moyen des racines après 40  40 jours est = 0.778424521831898"
## [1] 10
## [1] "Plot pour Hyperion jour 10"

## [1] 15
## [1] "Plot pour Hyperion jour 15"

## [1] 20
## [1] "Plot pour Hyperion jour 20"

## [1] 25
## [1] "Plot pour Hyperion jour 25"

## [1] 30
## [1] "Plot pour Hyperion jour 30"
## Warning: Removed 56 rows containing missing values (`geom_segment()`).

## [1] 35
## [1] "Plot pour Hyperion jour 35"
## Warning: Removed 367 rows containing missing values (`geom_segment()`).

## [1] 40
## [1] "Plot pour Hyperion jour 40"
## Warning: Removed 2122 rows containing missing values (`geom_segment()`).

## [1] "La profondeur max du système racinaire après 40 jours= 1582.92 [mm]"
## [1] "Le système racinaire après40jours s étend de-697.33[mm] à 741.36[mm] soit une largeur totale de :1438.69[mm]"
## [1] "Le diamètre moyen des racines après 40  40 jours est = 0.803318372824676"
## [1] 10
## [1] "Plot pour Juno jour 10"

## [1] 15
## [1] "Plot pour Juno jour 15"

## [1] 20
## [1] "Plot pour Juno jour 20"

## [1] 25
## [1] "Plot pour Juno jour 25"

## [1] 30
## [1] "Plot pour Juno jour 30"
## Warning: Removed 2 rows containing missing values (`geom_segment()`).

## [1] 35
## [1] "Plot pour Juno jour 35"
## Warning: Removed 59 rows containing missing values (`geom_segment()`).

## [1] 40
## [1] "Plot pour Juno jour 40"
## Warning: Removed 602 rows containing missing values (`geom_segment()`).

## [1] "La profondeur max du système racinaire après 40 jours= 1522.42 [mm]"
## [1] "Le système racinaire après40jours s étend de-587.84[mm] à 638.08[mm] soit une largeur totale de :1225.92[mm]"
## [1] "Le diamètre moyen des racines après 40  40 jours est = 0.75958647728393"
## [1] 10
## [1] "Plot pour Swingg jour 10"

## [1] 15
## [1] "Plot pour Swingg jour 15"

## [1] 20
## [1] "Plot pour Swingg jour 20"

## [1] 25
## [1] "Plot pour Swingg jour 25"

## [1] 30
## [1] "Plot pour Swingg jour 30"
## Warning: Removed 29 rows containing missing values (`geom_segment()`).

## [1] 35
## [1] "Plot pour Swingg jour 35"
## Warning: Removed 154 rows containing missing values (`geom_segment()`).

## [1] 40
## [1] "Plot pour Swingg jour 40"
## Warning: Removed 565 rows containing missing values (`geom_segment()`).

## [1] "La profondeur max du système racinaire après 40 jours= 1579.23 [mm]"
## [1] "Le système racinaire après40jours s étend de-526.38[mm] à 670.99[mm] soit une largeur totale de :1197.37[mm]"
## [1] "Le diamètre moyen des racines après 40  40 jours est = 0.754406812564866"
## [1] 10
## [1] "Plot pour Vegga jour 10"

## [1] 15
## [1] "Plot pour Vegga jour 15"

## [1] 20
## [1] "Plot pour Vegga jour 20"

## [1] 25
## [1] "Plot pour Vegga jour 25"

## [1] 30
## [1] "Plot pour Vegga jour 30"
## Warning: Removed 29 rows containing missing values (`geom_segment()`).

## [1] 35
## [1] "Plot pour Vegga jour 35"
## Warning: Removed 145 rows containing missing values (`geom_segment()`).

## [1] 40
## [1] "Plot pour Vegga jour 40"
## Warning: Removed 550 rows containing missing values (`geom_segment()`).

## [1] "La profondeur max du système racinaire après 40 jours= 1529.5 [mm]"
## [1] "Le système racinaire après40jours s étend de-648.76[mm] à 614.3[mm] soit une largeur totale de :1263.06[mm]"
## [1] "Le diamètre moyen des racines après 40  40 jours est = 0.746225735099451"

3 Maize

3.1 Choix des valeurs de paramètre

params_maize <- data.frame(
  ageAdv = 7,
  CVDD = 0.3,
  dAdv = 0.3900776,
  distAdv = 20,
  dmax = 4.5,
  dmin = 0.14,
  dSem = 0.1, #0.02667,si pas ouf
  EL =  32.5, #51,
  erAdv = 0.8,
  erSem =  0.5,
  exportName = 'maize' ,
  exportType = 1,
  GDs = 50,
  IPD =  2,
  LDC =  3000,
  maxAdv = 40,
  maxSem =  7,
  pdmax =  0.8,
  pdmin =  0,
  PDT = 4.5,
  RDM =  0.12,
  SGC =  0,
  sim_length = 20,
  simtime =  30,
  TMD =  0.08,
  TrInt = 0.01,
  TrT = 1 
)

3.2 Run le modèle .txt

ArchiSimple(par=params_maize,exporttype = 1,time = c(40))
## [1] "Simulation pour : maize i= 1 ========================"
## # A tibble: 1 × 27
##   ageAdv  CVDD  dAdv distAdv  dmax  dmin  dSem    EL erAdv erSem exportName
##    <dbl> <dbl> <dbl>   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>     
## 1      7   0.3 0.390      20   4.5  0.14   0.1  32.5   0.8   0.5 maize     
## # ℹ 16 more variables: exportType <dbl>, GDs <dbl>, IPD <dbl>, LDC <dbl>,
## #   maxAdv <dbl>, maxSem <dbl>, pdmax <dbl>, pdmin <dbl>, PDT <dbl>, RDM <dbl>,
## #   SGC <dbl>, sim_length <dbl>, simtime <dbl>, TMD <dbl>, TrInt <dbl>,
## #   TrT <dbl>

3.3 Résultats de la modélisation

setwd("ArchiSimple/src/archisimple93/")
maize <- fread('maize.txt') %>%
  mutate(sim='maize')
setwd("../../../") 

3.3.1 Plot

time_plot(data = maize,variety = 'maize',time=c(10,15,20,25,30,35,40))
## [1] 10
## [1] "Plot pour maize jour 10"

## [1] 15
## [1] "Plot pour maize jour 15"

## [1] 20
## [1] "Plot pour maize jour 20"

## [1] 25
## [1] "Plot pour maize jour 25"

## [1] 30
## [1] "Plot pour maize jour 30"

## [1] 35
## [1] "Plot pour maize jour 35"

## [1] 40
## [1] "Plot pour maize jour 40"

print(paste('La profondeur max du système racinaire=',max(maize$Z1),'[mm]'))
## [1] "La profondeur max du système racinaire= 719.24 [mm]"
print(paste0('Le système racinaire s étend de',min(maize$X1),'[mm] à ',max(maize$X1),'[mm] soit une largeur totale de :', max(maize$X1)-min(maize$X1),'[mm]'))
## [1] "Le système racinaire s étend de-134.93[mm] à 258.55[mm] soit une largeur totale de :393.48[mm]"
print(paste('Le diamètre moyen des racines est =',mean(maize$Diam)))
## [1] "Le diamètre moyen des racines est = 0.720280734227981"

4 Run les modèle .RSML sorgho et maïs

4.1 Résultats de la modélisation

4.1.1 Plot en fonction de l’age

4.1.2 Chiffre

La fonction archiDART::root donne les attributs de chaque racine.

5 Annexe

5.1 Generic monocot

5.1.1 Choix des valeurs de paramètre

5.1.2 Run le modèle .txt

5.1.2.1 Résultats de la modélisation

5.1.2.1.1 Plot en fonction du diamètre
heure_fin <- Sys.time()
duree <- heure_fin - heure_debut

Temps de compilation : 45.47229 mins minutes